#ifndef IS_COMPLEX_CUSTOM_TILING_H
#define IS_COMPLEX_CUSTOM_TILING_H
#include <cstdint>

struct IsComplexCustomTilingData {
    uint32_t totalLength;         ///< 总元素数量（输入数据的总长度，即所有核处理的元素总和）
    uint32_t dataType;            ///< 数据类型编号（对应dtype_emu中的值）

    // 核间均分场景下的切分参数（每个核处理的数据量）
    uint32_t blockLength;         ///< 单个核处理的总元素数（核间均分后的单块长度）
    uint32_t tileNum;             ///< 单个核内的切分块数量（核内再拆分的子块数）
    uint32_t tileLength;          ///< 核内每个子块的元素数（除最后一块外的标准子块长度）
    uint32_t lastTileLength;      ///< 核内最后一个子块的元素数（处理非对齐长度时的补全）

    // 核间不均分场景下，前N个核的切分参数（用于处理总长度无法被核数整除的情况）
    uint32_t formerNum;           ///< 前N个核的数量（承担额外元素的核数量）
    uint32_t formerLength;        ///< 前N个核中每个核处理的总元素数（比普通核多1个元素）
    uint32_t formerTileNum;       ///< 前N个核内的子块数量
    uint32_t formerTileLength;    ///< 前N个核内每个标准子块的元素数
    uint32_t formerLastTileLength;///< 前N个核内最后一个子块的元素数

    // 核间不均分场景下，剩余核的切分参数（处理总长度无法被核数整除的情况）
    uint32_t tailNum;             ///< 剩余核的数量（总核数 - formerNum）
    uint32_t tailLength;          ///< 剩余核中每个核处理的总元素数（普通核的长度）
    uint32_t tailTileNum;         ///< 剩余核内的子块数量
    uint32_t tailTileLength;      ///< 剩余核内每个标准子块的元素数
    uint32_t tailLastTileLength;  ///< 剩余核内最后一个子块的元素数

    uint32_t isEvenCore;          ///< 标记总核数是否为偶数（1=偶数，0=奇数，用于特殊场景优化）
};
#endif